// 文件名称: ClassDAO.java
// 创建日期: 2023-10-05
// 描述: 班级数据访问对象（DAO）类，提供对班级表的基本操作方法。

package org.wisdom.studentchoose.db;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 * 班级数据访问对象（DAO）类，提供对班级表的基本操作方法。
 */
public class ClassDAO {

    /**
     * 获取所有班级信息。
     *
     * @return 班级信息列表
     * @throws SQLException 如果数据库操作失败，则抛出SQL异常
     */
    public static List<ClassInfo> getAll() throws SQLException {
        List<ClassInfo> classes = new ArrayList<>();
        try (Connection conn = DatabaseConnection.getConnection();
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT * FROM Class")) {
            while (rs.next()) {
                ClassInfo clazz = new ClassInfo(rs.getInt("id"), rs.getString("name"));
                classes.add(clazz);
            }
        }
        return classes;
    }

    /**
     * 根据名称查询班级信息。
     *
     * @param name 班级名称
     * @return 符合条件的班级信息列表
     * @throws SQLException 如果数据库操作失败，则抛出SQL异常
     */
    public static List<ClassInfo> query(String name) throws SQLException {
        List<ClassInfo> classes = new ArrayList<>();
        try (Connection conn = DatabaseConnection.getConnection();
             PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM Class WHERE name LIKE ?")) {
            pstmt.setString(1, "%" + name + "%");
            try (ResultSet rs = pstmt.executeQuery()) {
                while (rs.next()) {
                    ClassInfo clazz = new ClassInfo(rs.getInt("id"), rs.getString("name"));
                    classes.add(clazz);
                }
            }
        }
        return classes;
    }

    /**
     * 添加新的班级信息。
     *
     * @param name 班级名称
     * @throws SQLException 如果数据库操作失败，则抛出SQL异常
     */
    public static void add(String name) throws SQLException {
        try (Connection conn = DatabaseConnection.getConnection();
             PreparedStatement pstmt = conn.prepareStatement("INSERT INTO Class (name) VALUES (?)")) {
            pstmt.setString(1, name);
            pstmt.executeUpdate();
        }
    }

    /**
     * 删除指定ID的班级信息。
     *
     * @param id 班级ID
     * @throws SQLException 如果数据库操作失败，则抛出SQL异常
     */
    public static void delete(int id) throws SQLException {
        try (Connection conn = DatabaseConnection.getConnection();
             PreparedStatement pstmt = conn.prepareStatement("DELETE FROM Class WHERE id = ?")) {
            pstmt.setInt(1, id);
            pstmt.executeUpdate();
        }
    }
}
